package net.bingosoft.common.task;

import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import net.bingosoft.common.config.Config;
import net.bingosoft.common.util.ClassUtil;

import org.apache.commons.lang.time.DateUtils;

/**
 * 
 * 2007-6-25 下午04:24:00
 * Author:yangdongyu(yangdy@bingosoft.net)
 * ReadMe:任务管理器,按照指定的时间间隔执行指定的任务
  	<listener>
 		<listener-class>net.bingosoft.common.task.TaskManager</listener-class>
 		<description>循环执行指定的任务</description>
 	</listener>
 * ChangeLog:
 */
public class TaskManager implements ServletContextListener {
	/**
	 * 每天的毫秒数
	 */
	public static final long PERIOD_DAY = DateUtils.MILLIS_PER_DAY;
	/**
	 * 一周内的毫秒数
	 */
	public static final long PERIOD_WEEK = PERIOD_DAY * 7;
	/**
	 * 无延迟
	 */
	public static final long NO_DELAY = 0;
	/**
	 * 定时器
	 */
	private Timer timer;
	
	
	private TimerTask task ;
	/**
	 * 在Web应用启动时初始化任务
	 */
	public void contextInitialized(ServletContextEvent event) {
        
		//定义定时器
		timer = new Timer("执行系统任务",true);
		//任务执行频率,默认一周执行一次
		Long taskInterval = Config.getLong("TASK_INTERVAL", PERIOD_WEEK );
		String taskClassPath = Config.getString("TASK_CLASS_PATH");
		task = (TimerTask)ClassUtil.newInstance(taskClassPath);
		//启动备份任务,每月(4个星期)执行一次
		timer.schedule(task,NO_DELAY, taskInterval);
	}
	/**
	 * 在Web应用结束时停止任务
	 */
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel(); // 定时器销毁
	}
}


